package java核心及工具类.Format类;

import java.util.Arrays;
import java.util.Locale;

public class Locale类 {

	public static void main(String[] args) {
		//1.获取默认的Locale
		Locale defaultLocale = Locale.getDefault();
		//2.直接使用Locale的静态对象，Locale.java中提供了以下静态对象
		Locale locale1=Locale.SIMPLIFIED_CHINESE;//Locale locate=Locale.FRANCE; 等...
		//3.通过Locale的构造函数创建Locale对象
			//Locale的构造函数共有3个。如下：

			//Locale(String language)
			//Locale(String language, String country)
			//Locale(String language, String country, String variant)
		Locale locale2=new Locale("zh");
		Locale locale3=new Locale("zh","CN");
		Locale locale4=new Locale("zh","CN");
		Locale locale5=new Locale("zh","CN","xx");
		String variant=locale5.getDisplayVariant();
		System.out.println(variant);
		
		//获取当前Java虚拟机线程默认的国家和语言信息

		String country = defaultLocale.getCountry();//返回国家地区代码
		String language = defaultLocale.getLanguage();//返回国家的语言
		String displayCountry = defaultLocale.getDisplayCountry();//返回适合向用户显示的国家信息
		String displayLanaguage = defaultLocale.getDisplayLanguage();//返回适合向用户展示的语言信息
		String displayName = defaultLocale.getDisplayName();//返回适合向用户展示的语言环境名
		System.out.println(country);//CN
		System.out.println(language);//zh
		System.out.println(displayCountry);//中国
		System.out.println(displayLanaguage);//中文
		System.out.println(displayName);//中文(中国)
		
		//Locale类支持非常多的国家和地区。我们可以通过以下方法，查看Locale支持的全部区域：
		Locale[] ls=Locale.getAvailableLocales();
		//for (Locale locale:ls) {
		//	System.out.println(locale);//显示Locale支持的全部区域
		//}
		
		//获取当前 Locale 的语言代码
		Locale locale = new Locale("zh", "CN", "yue");
		System.out.println(locale.getLanguage()); //zh
		
		//获取当前 Locale 的国家/地区代码
		Locale lc1 = new Locale("zh", "CN", "yue");
		System.out.println(lc1.getCountry()); // CN
		
		//获取当前 Locale 的脚本
		Locale lc2 = new Locale("zh", "CN", "yue");
		System.out.println(lc2.getScript()); // ""
		
		//获取当前 Locale 的语言变体 (可以理解为方言，如：粤语 (yue))
		//Locale locale = new Locale("zh", "CN", "yue");
		System.out.println(locale.getVariant()); // yue
		
		//获取适合展示给用户的 Locale 语言名称，并根据 inLocale 进行本地化
		//getDisplayLanguage(Locale inLocale)
		//Locale locale = new Locale("zh", "CN", "yue");
		System.out.println(locale.getDisplayLanguage(Locale.CHINA)); // 中文
		System.out.println(locale.getDisplayLanguage(Locale.US)); // Chinese
		System.out.println(locale.getDisplayLanguage(Locale.JAPANESE)); // 中国語
		System.out.println(locale.getDisplayLanguage(Locale.GERMANY)); // Chinesisch
		System.out.println(locale.getDisplayLanguage(Locale.FRANCE)); // chinois
		
		//获取默认 Locale
		System.out.println(Locale.getDefault()); // zh_CN
		
		//获取所有可获得的 Locale
		System.out.println(Arrays.toString(Locale.getAvailableLocales()));
	}

}
/*
【Java国际化】
我们使用java.lang.Locale来构造Java国际化的情境。

java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的操作。

构造一个系统默认的Locale



【获得此Java虚拟机当前线程默认的语言环境值】
获取当前Java虚拟机线程默认的国家和语言信息

String country = defaultLocale.getCountry();//返回国家地区代码

String language = defaultLocale.getLanguage();//返回国家的语言

String displayCountry = defaultLocale.getDisplayCountry();//返回适合向用户显示的国家信息

String displayLanaguage = defaultLocale.getDisplayLanaguge();//返回适合向用户展示的语言信息

String displayName = defaultLocale.getDisplayName();//返回适合向用户展示的语言环境名



加入当前Java虚拟机线程所处的操作系统的区域语言设置为“中文（简体，中国）”，则上边的运行结果依次将会是：

    CN
    zh
    中国
    中文
    中文（中国）

根据国家地区和语言构造一个Locale（语言环境）

Locale currentLocale = new Locale(“zh”, ”CN”);
构造方法为：Locale(String language, String country);


【使用ResouceBundle读取国际化资源文件】
ResourceBundle资源包包含特定语言环境的对象。使用其可以加载并读取语言环境资源。

1.轻松的本地化或者翻译成不同的语言
2.一次处理多个语言环境
3.以后可以轻松的进行修改，一遍支持更多的语言环境。

当程序需要特定于语言环境的对象时，它使用getBundle()方法加载ResourceBundle类

	ResourceBundle rb = ResourceBundle.getBundle(“res.MessageBundle”, currentLocale);

其中，res.MessageBundle代表的是我们在src下建立了一个res文件夹，而res文件夹下有一个名为MessageBundle.properteis的资源文件。我们允许在此建立多个
国际化资源文件：

	MessageBundle_zh_CN.properties;MessageBundle_en_US.properteis;

其中MessageBundle就是要在构造ResourceBundle时使用的字符串，这个名字合法即可，不需要特定约束。后边的名字一定要遵循规则：

	resourceName_language_country.properteis;

然后我们使用rb.getString(key);就可以获取资源文件中的Key对应的value.

使用Struts1.x实现国际化自动切换

查看Struts源码就可以发现，语言环境信息就存放在session中，通过this.setLocale(request, locale);

所以要实现国际化就要在页面上点击超链接经过Action的时候改变会话中Locale（语言环境）的值。在Action中：

	//接受客户端传过来的语言请求信息  
    String language = request.getParameter(“myLanguage”);     
	//定义语言地区信息 
    Locale currentLocale = null;    
  	//根据不同的请求创建不同的语言环境信息  
    if (“zh”.equals(language)) {      
         currentLocale = new Locale(“zh”, “CN”);  
	} 
    else if (“en”.equals(language)) {       
        currentLocale = new Locale(“en”, “US”);  
	}    
  	//…… 
  	//将session中的信息更改掉   
	this.setLocale(request, currentLocale);     
	//当然，在页面显示资源文件信息的时候采用如下这种方式：    
	//  <bean:message key="key"/>
*/
/*
【Java 中 Locale 类的常用方法】

一、Locale类定义

Locale 类位于 java.util 包中，主要用于语言的国际化

Locale 表示语言环境，每一个 Locale 对象都代表了一个特定的地理、政治或文化区域

Locale 类提供了三种方式来获取 Locale 对象

1.使用 Locale.getDefault() 方法
	获取默认 Locale
2.使用 Locale 类提供的静态对象
	如：Locale.CHINA
3.使用构造方法
	Locale(String language)
	Locale(String language, String country)
	Locale(String language, String country, String variant)

二、Locale类常用方法

1.实例方法
	getLanguage()
		获取当前 Locale 的语言代码
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getLanguage()); // zh
	getCountry()
		获取当前 Locale 的国家/地区代码
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getCountry()); // CN
	getScript()
		获取当前 Locale 的脚本
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getScript()); // ""
	getVariant()
		获取当前 Locale 的语言变体 (可以理解为方言，如：粤语 (yue))
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getVariant()); // yue
	getDisplayLanguage()
		获取适合展示给用户的 Locale 语言名称
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayLanguage()); // 中文
	getDisplayLanguage(Locale inLocale)
		inLocale
			需要展示的 Locale
		获取适合展示给用户的 Locale 语言名称，并根据 inLocale 进行本地化
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayLanguage(Locale.CHINA)); // 中文
			System.out.println(locale.getDisplayLanguage(Locale.US)); // Chinese
	getDisplayCountry()
		获取适合展示给用户的 Locale 国家/地区名称
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayCountry()); // 中国
	getDisplayCountry(Locale inLocale)
		inLocale
			需要展示的 Locale
		获取适合展示给用户的 Locale 国家/地区名称，并根据 inLocale 进行本地化
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayCountry(Locale.CHINA)); // 中国
			System.out.println(locale.getDisplayCountry(Locale.US)); // China
	getDisplayScript()
		获取适合展示给用户的 Locale 脚本名称
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayScript()); // ""
	getDisplayScript(Locale inLocale)
		inLocale
			需要展示的 Locale
		获取适合展示给用户的 Locale 脚本名称，并根据 inLocale 进行本地化
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayScript(Locale.CHINA)); // ""
			System.out.println(locale.getDisplayScript(Locale.US)); // ""
	getDisplayVariant()
		获取适合展示给用户的 Locale 语言变体名称 (可以理解为方言)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayVariant()); // yue
	getDisplayVariant(Locale inLocale)
		inLocale
			需要展示的 Locale
		获取适合展示给用户的 Locale 语言变体名称 (可以理解为方言)，并根据 inLocale 进行本地化
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayVariant(Locale.CHINA)); // yue
			System.out.println(locale.getDisplayVariant(Locale.US)); // yue
	getDisplayName()
		获取适合展示给用户的 Locale 名称
		是 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 四个方法返回值组成的一个字符串
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayName()); // 中文 (中国,yue)
	getDisplayName(Locale inLocale)
		inLocale
			需要展示的 Locale
		获取适合展示给用户的 Locale 名称，并根据 inLocale 进行本地化
		是 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 四个方法返回值组成的一个字符串
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getDisplayName(Locale.CHINA)); // 中文 (中国,yue)
			System.out.println(locale.getDisplayName(Locale.US)); // Chinese (China,yue)
	getISO3Country()
		获取当前 Locale 的国家/地区代码的三字母缩写 (多用于国际上的正式场合)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getISO3Country()); // CHN
	getISO3Language()
		获取当前 Locale 的语言代码的三字母缩写 (多用于国际上的正式场合)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getISO3Language()); // zho
	stripExtensions()
		获取当前 Locale 不带扩展的副本
		如果当前 Locale 没有扩展名，则返回此 Locale
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.stripExtensions()); // zh_CN_yue
	toLanguageTag()
		获取当前 Locale 设置的格式完好的语言标记
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.toLanguageTag()); // zh-CN-x-lvariant-yue
	hasExtensions()
		如果当前 Locale 带有扩展，则返回 true；否则返回 false
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.hasExtensions()); // false
	getExtensionKeys()
		获取与当前 Locale 相关联的扩展键值集
		如果当前 Locale 不带有扩展，则返回空的扩展键值集 (返回的集合是不可修改的，且键值都是小写的)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getExtensionKeys()); // []
	getUnicodeLocaleKeys()
		获取与当前 Locale 相关联的 Unicode 语言环境键值集
		如果当前 Locale 没有，则返回空的 Unicode 语言环境键值集 (返回的集合是不可修改的，且键值都是小写的)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getUnicodeLocaleKeys()); // []
	getUnicodeLocaleAttributes()
		获取与当前 Locale 相关联的 Unicode 语言环境属性集
		如果当前 Locale 没有，则返回空的 Unicode 语言环境属性集 (返回的集合是不可修改的)
			Locale locale = new Locale("zh", "CN", "yue");
			System.out.println(locale.getUnicodeLocaleAttributes()); // []
	getExtension(char key)
		key
			扩展的 key 值
		获取与当前 Locale 相关联的指定 key 值的扩展
		如果没有与该 key 值相关联的扩展，则返回 null
		为了格式整齐， key 值不区分大小写，且必须从 [0-9A-Za-z] 中取值
			Locale locale = new Locale("zh", "CN", "yue");
			locale.getExtension('A'); // ""
	getUnicodeLocaleType(String key)
		key
			Unicode Locale 的 key 值
		获取与当前 Locale 相关联的指定 key 值的 Unicode 语言环境类型
		若果 key 值未定义，则返回 null
		为了格式整齐， key 值为两个字符，不区分大小写，且必须从 [0-9A-Za-z] 中取值
			Locale locale = new Locale("zh", "CN", "yue");
			locale.getUnicodeLocaleType("AA"); // ""

2.静态方法
	Locale.getDefault()
		获取默认 Locale
			System.out.println(Locale.getDefault()); // zh_CN
	setDefault(Locale newLocale)
		newLocale
			新的默认 Locale
		设置默认 Locale
			Locale.setDefault(new Locale("zh", "CN", "yue"));
			System.out.println(Locale.getDefault()); // zh_CN_yue
	Locale.getAvailableLocales()
		获取所有可获得的 Locale
			System.out.println(Arrays.toString(Locale.getAvailableLocales()));
			// [, ar_AE, ar_JO, ar_SY, hr_HR, fr_BE, es_PA, mt_MT, es_VE, bg, zh_TW, it, ko, 
			// uk, lv, da_DK, es_PR, vi_VN, en_US, sr_ME, sv_SE, es_BO, en_SG, ar_BH, pt, 
			// ar_SA, sk, ar_YE, hi_IN, ga, en_MT, fi_FI, et, sv, cs, sr_BA_#Latn, el, uk_UA,
			// hu, fr_CH, in, es_AR, ar_EG, ja_JP_JP_#u-ca-japanese, es_SV, pt_BR, be,
			// is_IS, cs_CZ, es, pl_PL, tr, ca_ES, sr_CS, ms_MY, hr, lt, es_ES, es_CO, bg_BG, 
			// sq, fr, ja, sr_BA, is, es_PY, de, es_EC, es_US, ar_SD, en, ro_RO, en_PH, 
			// ca, ar_TN, sr_ME_#Latn, es_GT, sl, ko_KR, el_CY, es_MX, ru_RU, es_HN, zh_HK, 
			// no_NO_NY, hu_HU, th_TH, ar_IQ, es_CL, fi, ar_MA, ga_IE, mk, tr_TR, et_EE,
			// ar_QA, sr__#Latn, pt_PT, fr_LU, ar_OM, th, sq_AL, es_DO, es_CU, ar, ru, en_NZ, 
			// sr_RS, de_CH, es_UY, ms, el_GR, iw_IL, en_ZA, th_TH_TH_#u-nu-thai, hi,
			// fr_FR, de_AT, nl, no_NO, en_AU, vi, nl_NL, fr_CA, lv_LV, de_LU, es_CR, ar_KW, 
			// sr, ar_LY, mt, it_CH, da, de_DE, ar_DZ, sk_SK, lt_LT, it_IT, en_IE, zh_SG, 
			// ro, en_CA, nl_BE, no, pl, zh_CN, ja_JP, de_GR, sr_RS_#Latn, iw, en_IN, ar_LB, 
			// es_NI, zh, mk_MK, be_BY, sl_SI, es_PE, in_ID, en_GB]
	Locale.getISOCountries()
		获取 ISO 3166 标准中定义的所有国家/地区代码
			System.out.println(Arrays.toString(Locale.getISOCountries()));
			// [AD, AE, AF, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, 
			// BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, 
			// CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, 
			// DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, 
			// GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, 
			// IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, 
			// KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, 
			// MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, 
			// NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, 
			// RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, 
			// ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, 
			// UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, YE, YT, ZA, ZM, ZW]
	Locale.getISOLanguages()
		获取 ISO 639 标准中定义的所有语言代码
			// [aa, ab, ae, af, ak, am, an, ar, as, av, ay, az, ba, be, bg, bh, bi, bm, bn, bo, br, 
			// bs, ca, ce, ch, co, cr, cs, cu, cv, cy, da, de, dv, dz, ee, el, en, eo, es, et, eu, fa, 
			// ff, fi, fj, fo, fr, fy, ga, gd, gl, gn, gu, gv, ha, he, hi, ho, hr, ht, hu, hy, hz, ia, 
			// id, ie, ig, ii, ik, in, io, is, it, iu, iw, ja, ji, jv, ka, kg, ki, kj, kk, kl, km, kn, 
			// ko, kr, ks, ku, kv, kw, ky, la, lb, lg, li, ln, lo, lt, lu, lv, mg, mh, mi, mk, ml, mn, 
			// mo, mr, ms, mt, my, na, nb, nd, ne, ng, nl, nn, no, nr, nv, ny, oc, oj, om, or, os, pa, 
			// pi, pl, ps, pt, qu, rm, rn, ro, ru, rw, sa, sc, sd, se, sg, si, sk, sl, sm, sn, so, sq, 
			// sr, ss, st, su, sv, sw, ta, te, tg, th, ti, tk, tl, tn, to, tr, ts, tt, tw, ty, ug, uk, 
			// ur, uz, ve, vi, vo, wa, wo, xh, yi, yo, za, zh, zu]
	Locale.filter(List priorityList, Collection locales)
		priorityList
			用户的语言优先级列表，其中每个语言标记根据优先级降序排序
		locales
			用于匹配的 Locale 实例列表
		根据 RFC 4647 标准中定义的过滤机制筛选出匹配的 Locale 实例列表
		其底层调用了 filter(priorityList, locales, FilteringMode.AUTOSELECT_FILTERING) 方法
			String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
			List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
			List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US"));
			List<Locale> filter = Locale.filter(priorityList, locales);
			System.out.println(filter); // [en_US, zh_CN]
		Locale.filter(List priorityList, Collection locales, FilteringMode mode)
			priorityList
				用户的语言优先级列表，其中每个语言标记根据优先级降序排序
			locales
				用于匹配的 Locale 实例列表
			mode
				过滤模式
名称	作用
					AUTOSELECT_FILTERING	基于给定 Locale 列表的自动过滤模式
					EXTENDED_FILTERING	扩展过滤模式
					IGNORE_EXTENDED_RANGES	指定过滤模式，将忽略给定 Locale 列表中包含的扩展语言范围
					MAP_EXTENDED_RANGES	指定过滤模式，如果给定的 Locale 列表中包含扩展语言范围，则将其映射到基本语言范围
					REJECT_EXTENDED_RANGES	指定过滤模式，如果给定的 Locale 列表中包含扩展语言范围，则拒绝该列表，并抛出异常
			根据 RFC 4647 标准中定义的过滤机制筛选出匹配的 Locale 实例列表
				String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
				List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
				List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US"));
				List<Locale> filter = Locale.filter(priorityList, locales, Locale.FilteringMode.AUTOSELECT_FILTERING);
				System.out.println(filter); // [en_US, zh_CN]
		Locale.filterTags(List priorityList, Collection tags)
			priorityList
				用户的语言优先级列表，其中每个语言标记根据优先级降序排序
			tags
				用于匹配的语言标记列表
			根据 RFC 4647 标准中定义的过滤机制筛选出匹配的语言标记列表
			其底层调用了 filterTags(priorityList, tags, FilteringMode.AUTOSELECT_FILTERING) 方法
				String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
				List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
				List<String> tags = Arrays.asList("zh-CN", "en-US");
				List<String> filterTags = Locale.filterTags(priorityList, tags);
				System.out.println(filterTags); // [en-us, zh-cn]
		Locale.filterTags(List priorityList, Collection tags， FilteringMode mode)
			priorityList
				用户的语言优先级列表，其中每个语言标记根据优先级降序排序
			tags
				用于匹配的语言标记列表
			mode
				过滤模式
			根据 RFC 4647 标准中定义的过滤机制筛选出匹配的语言标记列表
				String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
				List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
				List<String> tags = Arrays.asList("zh-CN", "en-US");
				List<String> filterTags = Locale.filterTags(priorityList, tags, Locale.FilteringMode.AUTOSELECT_FILTERING);
				System.out.println(filterTags); // [en-us, zh-cn]
		Locale.lookup(List priorityList, Collection locales)
			priorityList
				用户的语言优先级列表，其中每个语言标记根据优先级降序排序
			locales
				用于匹配的 Locale 实例列表
			根据 RFC 4647 标准中定义的查找机制返回最佳匹配的 Locale 实例
				String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
				List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
				List<Locale> locales = Arrays.asList(new Locale("zh", "CN"), new Locale("en", "US"));
				Locale lookup = Locale.lookup(priorityList, locales);
				System.out.println(lookup); // en_US
		Locale.lookupTag(List priorityList, Collection tags)
			priorityList
				用户的语言优先级列表，其中每个语言标记根据优先级降序排序
			tags
				用于匹配的语言标记列表
			根据 RFC 4647 标准中定义的查找机制返回最佳匹配的语言标记
				String ranges = "zh-CN;q=0.2, ja-JP;q=0.4, en-US;q=0.6";
				List<Locale.LanguageRange> priorityList = Locale.LanguageRange.parse(ranges);
				List<String> tags = Arrays.asList("zh-CN", "en-US");
				String tag = Locale.lookupTag(priorityList, tags);
				System.out.println(tag); // en-us
		Locale.forLanguageTag(String languageTag)
			languageTag
				语言标记
			根据 IETF BCP 47 标准获取指定语言标记代表的 Locale
				Locale locale = Locale.forLanguageTag("zh-CN-x-lvariant-yue");
				System.out.println(locale); // zh_CN_yue
*/